package com.tcc.fastline.BLL;

import java.util.List;

import android.content.Context;
import android.util.Log;

import com.tcc.fastline.BLL.interfaces.IIntegranteFilaBS;
import com.tcc.fastline.DAO.DAOFactory;
import com.tcc.fastline.DAO.interfaces.IIntegranteFilaDAO;
import com.tcc.fastline.Domain.Fila;
import com.tcc.fastline.Domain.IntegranteFila;
import com.tcc.fastline.Domain.Usuario;
import com.tcc.fastline.Exceptions.ValidationServerException;

public class IntegranteFilaBS implements IIntegranteFilaBS {

	private IIntegranteFilaDAO integranteDAO;

	public IntegranteFilaBS(Context context) {
		this.integranteDAO = DAOFactory.getIntegranteFilaDAO(context);
	}

	@Override
	public List<IntegranteFila> ObterIntegrantesFila(Integer codigoFila)
			throws ValidationServerException, Exception {
		try {
			return this.integranteDAO.ObterIntegrantesFila(codigoFila);
		} catch (ValidationServerException e) {
			throw e;
		} catch (Exception e) {
			throw new RuntimeException(e.getMessage());
		}
	}

	@Override
	public Integer ObterPosicaoUsuario(Fila fila, Usuario user)
			throws ValidationServerException, Exception {
		Integer posicao = 0;
		try {
			List<IntegranteFila> integrantes = this.integranteDAO
					.ObterIntegrantesFila(fila.getCodigo());

			Log.e("Integrantes", integrantes != null ? "nao nulo" : "nulo");

			for (IntegranteFila integranteFila : integrantes) {
				if (integranteFila.getUsuario().getCodigo()
						.equals(user.getCodigo())) {
					break;
				}

				posicao++;
			}

		} catch (ValidationServerException e) {
			throw e;
		} catch (Exception e) {
			throw e;
		}
		return posicao;
	}

	@Override
	public IntegranteFila ObterIntegrante(Integer codigoFila,
			Integer codigoUsuario) throws ValidationServerException, Exception {
		try {
			return this.integranteDAO.ObterIntegrante(codigoFila, codigoUsuario);
		} catch (ValidationServerException e) {
			throw e;
		} catch (Exception e) {
			throw e;
		}
	}

	@Override
	public void RemoverIntegranteFila(Integer codigoFila, Integer codigoUsuario)
			throws ValidationServerException, Exception {
		try {
			this.integranteDAO.RemoverIntegranteFila(codigoFila, codigoUsuario);
		} catch (ValidationServerException e) {
			throw e;
		} catch (Exception e) {
			throw e;
		}
	}

	@Override
	public void ChamarIntegranteFila(IntegranteFila integrante)
			throws ValidationServerException, Exception {
		try {
			this.integranteDAO.ChamarIntegranteFila(integrante);
		} catch (ValidationServerException e) {
			throw e;
		} catch (Exception e) {
			throw e;
		}
	}
}
